package br.ufc.apsoo.repositories;

import java.io.Serializable;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

import org.hibernate.Session;

import br.com.caelum.vraptor.ioc.Component;
import br.ufc.apsoo.models.Usuario;

@Component
public class UsuarioRepositoryImpl extends Repository<Usuario, Serializable>
		implements TodosUsuarios {

	private Session session;

	protected UsuarioRepositoryImpl(EntityManager entityManager) {
		super(entityManager);
		session = (Session) entityManager.getDelegate();
	}

	public Usuario login(String login, String senha) throws Exception {

		try {
			Query query = entityManager
					.createQuery("from Usuario where login = :login and senha = :senha");

			query.setParameter("login", login);
			query.setParameter("senha", senha);

			return (Usuario) query.getSingleResult();

		} catch (NoResultException e) {
			throw new Exception("Usuário ou senha incorreta!", e);
		} catch (NonUniqueResultException e) {
			throw new Exception("Erro! Usuário duplicado!", e);
		} catch (Exception e) {
			throw new Exception("Não foi possível acessar o sistema!", e);
		}
	}

}
